home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / argus.arc / XARGUS.S < prev   
Text File  |  1986-02-06  |  7KB  |  251 lines

  1. ;-------------------------------------------------------------------------
  2. ;
  3. ;  XARGUS : Hooks itself into XBIOS trap vector, and checks for calls
  4. ;  to the Floprd function. It displays its parameters in the upper right
  5. ;  screen corner.
  6. ;  Find out for yourself about possible applications ...
  7. ;
  8. ;  N.B. Like all software, this program is free. Copy it as you like.
  9. ;       Modify it (I will do, too). Enhance it. Add bells & whistles.
  10. ;
  11. ;       I'm not asking you here to send me money. Instead, if you've
  12. ;       done a nice enhancement (or got a nice piece of software
  13. ;       working 'better' with ARGUS's help), give them to the person
  14. ;       you got ARGUS from.
  15. ;       Sooner or later, this will reach me, too, and even have some
  16. ;       people benefit of the system during the transit.
  17. ;
  18. ;       Happy hacking, greetings to Arthur Dent,
  19. ;
  20. ;                            --- KS ---
  21. ;
  22. ;------------------------------------------------------------------------
  23.  
  24. start: jmp entry
  25.  
  26. xid:     dc.l $405678
  27.  
  28. ;---------------------------------------
  29. ;       define some constants
  30. ;---------------------------------------
  31. vduhireg   = $ff8201
  32. vdumidreg  = $ff8203
  33.  
  34. homeline   = 1
  35. homecol    = 50
  36.  
  37. uparrow    = 1
  38. rightarrow = 3
  39. clock      = 9
  40.  
  41.  
  42. ;---------------------------------------
  43. ;    define memory storage locations
  44. ;---------------------------------------
  45. oldtrap14:  dc.l 0 ; init stores former trap 14 vector here
  46. oldrts:     dc.l 0 ; indirect return vector stored here
  47. vduaddress: dc.l $f8000 ; holds video address
  48. fontbase:   dc.l 0 ; init stores font character data address here
  49.  
  50. device:     dc.w 0 ; drive 0->A,1->B ...
  51. side:       dc.w 0 ; disk side
  52. track:      dc.w 0
  53. sector:     dc.w 0
  54. bufad:      dc.l 0 ; adress of buffer where to store sectors
  55. count:      dc.w 0 ; number of sectors to read
  56.  
  57. colpos:    dc.l 0 ; cursor column
  58. linpos:    dc.l 0 ; cursor line
  59.  
  60.            even
  61.  
  62. ;-----------------------------------
  63. ;    define utility routines
  64. ;-----------------------------------
  65.  
  66. calcvdu: ;
  67.          ; compute video memory start adress,return in d0
  68.          ; and store in vduaddress
  69.          move.l #clcvdu1,-(sp)
  70.          move.w #38,-(sp)
  71.          trap #14
  72.          addq.l #6,sp
  73.          rts
  74. clcvdu1: clr.l d0
  75.          move.b vduhireg,d0
  76.          asl.w #8,d0
  77.          move.b vdumidreg,d0
  78.          asl.l #8,d0
  79.          move.l d0,vduaddress
  80.          rts
  81.  
  82. calchar: ; compute 8x8 system font base address & store
  83.          dc.w $a000 ; line A call (get params,a1 points to fonts)
  84.          move.l  4(a1),a0 ; 8x8 font's adress is second in table
  85.          move.l 76(a0),a0 ; at offset 76 is the pointer to font data
  86.          move.l a0,fontbase ; store
  87.          rts
  88.  
  89. writec:  ; output character in d0 (ascii) to screen.
  90.          ; suppose vdu start and font start are setup OK
  91.          movem.l d0/a0/a1,-(sp) ; those will be modified
  92.          and.l #$ff,d0 ; mask off upper bits
  93.          move.l fontbase,a0
  94.          add.l d0,a0   ; a0 points to character bits
  95.          move.l linpos,d0
  96.          mulu  #640,d0
  97.          add.l colpos,d0
  98.          add.l vduaddress,d0
  99.          move.l d0,a1  ; a1 points into video ram
  100.          move.b     (a0), 80(a1)
  101.          move.b $100(a0),160(a1)
  102.          move.b $200(a0),240(a1)
  103.          move.b $300(a0),320(a1)
  104.          move.b $400(a0),400(a1)
  105.          move.b $500(a0),480(a1)
  106.          move.b $600(a0),560(a1)
  107.          move.b $700(a0),640(a1)
  108.          move.b       #0,720(a1) ; empty scanline below for better readout
  109.          addq.l #1,colpos
  110.          cmp.l #80,colpos
  111.          bne writec1
  112.          clr.l colpos
  113.          addq.l #1,linpos
  114.          cmp.l #25,linpos
  115.          bne writec1
  116.          clr.l linpos
  117. writec1: movem.l (sp)+,d0/a0/a1
  118.          rts
  119.  
  120. writes:  ; write (null terminated) string pointed at by a0
  121.          movem.l d0/a0,-(sp)
  122.          move.b (a0)+,d0
  123.          beq qwrites
  124.          jsr writec
  125. qwrites: movem (sp)+,d0/a0
  126.          rts
  127.  
  128. hextab:  dc.b '0123456789ABCDEF' ; quick&dirty
  129.  
  130. writen:  ; write nibble in lower 4 bits of d0
  131.          movem.l d0/a0,-(sp)
  132.          and.l  #$0f,d0
  133.          move.l #hextab,a0
  134.          add.l d0,a0
  135.          move.b (a0),d0
  136.          jsr writec
  137.          movem.l (sp)+,d0/a0
  138.          rts
  139.  
  140. writeb:  ; write lower d0 byte
  141.          ror.b #4,d0
  142.          jsr writen
  143.          ror.b #4,d0
  144.          jsr writen
  145.          rts
  146.  
  147. writew:  ; write lower word in d0
  148.          ror.w #8,d0
  149.          jsr writeb
  150.          ror.w #8,d0
  151.          jsr writeb
  152.          rts
  153.  
  154. writel:  ; write d0 as longword
  155.          swap d0
  156.          jsr writew
  157.          swap d0
  158.          jsr writew
  159.          rts
  160.  
  161. entry:   move.l #init,-(sp)
  162.          move.w #38,-(sp)  ; have to call init with supervisor mode.
  163.          trap #14
  164.          addq.l #6,sp
  165.          move.w #0,-(sp)
  166.          move.l #500+last-start,-(sp) ; nonorthodox, but should work here
  167.          move.w #$31,-(sp) ; terminate & stay resident
  168.          trap #1
  169.  
  170. init:    jsr calcvdu
  171.          jsr calchar
  172.          move.l #$b8,a0
  173.          move.l (a0),oldtrap14
  174.          move.l #mytrap14,(a0)
  175.          rts
  176.  
  177. mytrap14:  move.l a7,a1
  178.            btst #13,(sp) ; called from user mode ?
  179.            bne supermode
  180.            move.l usp,a1 ; yes, get params from user stack !
  181.            subq.l #6,a1  ; adjust pointer for following offsets to be OK
  182.  
  183. supermode: cmp.w #8,6(a1)
  184.            beq myfloprd
  185.            move.l oldtrap14,a0
  186.            jmp (a0)
  187.  
  188. myfloprd:  move.w 24(a1),count
  189.            move.w 22(a1),side
  190.            move.w 20(a1),track
  191.            move.w 18(a1),sector
  192.            move.w 16(a1),device
  193.            move.w  8(a1),bufad
  194.  
  195.            move.l  2(sp),oldrts ; get caller's address
  196.            move.l #myrts,2(sp) ; we have to do this trick to
  197.                                ; get the error# returned in d0 !
  198.            movem.l d0-d7/a0-a6,-(sp) ; safety first
  199.            move.l #homeline,linpos
  200.            move.l #homecol ,colpos
  201.            move.b #'$',d0
  202.            jsr writec
  203.            move.l oldrts,d0
  204.            jsr writel
  205.            move.b #$20,d0
  206.            jsr writec
  207.            move.b #'A',d0
  208.            add.w  device,d0
  209.            jsr writec
  210.            move.b #':',d0
  211.            jsr writec
  212.            move.b #uparrow,d0
  213.            add.w  side,d0
  214.            jsr writec
  215.            move.b #'T',d0
  216.            jsr writec
  217.            move.w track,d0
  218.            jsr writeb
  219.            move.b #',',d0
  220.            jsr writec
  221.            move.b #'S',d0
  222.            jsr writec
  223.            move.w sector,d0
  224.            jsr writeb
  225.            move.b #$20,d0
  226.            jsr writec
  227.            move.b #'#',d0
  228.            jsr writec
  229.            move.w count,d0
  230.            jsr writew
  231.            move.b #rightarrow,d0
  232.            jsr writec
  233.            move.b #clock,d0
  234.            jsr writec
  235.            move.b #$20,d0
  236.            jsr writec
  237.            subq.l #2,colpos
  238.  
  239.            movem.l (sp)+,d0-d7/a0-a6
  240.            move.l oldtrap14,a0
  241.            jmp (a0)
  242.  
  243. myrts:     movem.l d0-d7/a0-a6,-(sp)
  244.            jsr writeb
  245.            movem.l (sp)+,d0-d7/a0-a6
  246.            move.l oldrts,a0
  247.            jmp (a0)
  248. last:
  249.            end
  250.  
  251.